home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2004 April
/
Gamestar_61_2004-04_dvdb.iso
/
DVDStar
/
Editace
/
hltp.exe
/
{app}
/
Applications
/
QuArK
/
plugins
/
faceutils.py
< prev
next >
Wrap
Text File
|
2004-01-05
|
2KB
|
92 lines
######################################################
#
# Utilities for working with faces
#
# tiglari@planetquake.com
#
######################################################
#$Header: /cvsroot/quark/runtime/plugins/faceutils.py,v 1.3 2001/08/11 04:14:51 tiglari Exp $
from quarkpy.qutils import *
def cyclenext(i, len):
j = i+1
if j == len:
return 0
else:
return j
def cycleprev(i, len):
j = i-1
if j == 0:
return len
else:
return j
def vtx_index(vtxes, pos):
for i in range(len(vtxes)):
if not(vtxes[i]-pos):
return i
def abutting_vtx(l1, l2):
"gets the two vtx shared between l1 & l2, which are"
"supposed to be vertex-cyles of abutting faces"
"returns list of (el,ind) tuples, where el is from l1,"
"and ind is its index"
intx = []
pozzies = []
i = -1
for el1 in l1:
i = i+1
for el2 in l2 :
if not (el1-el2):
pozzies.append(i)
intx.append((el1,i))
break
if len(intx) != 2:
return []
if pozzies[0]==0 and pozzies[1]>1:
intx.reverse()
return intx
def intersection_vect(l1, l2):
"for points/vectors only"
"note that the points come out in the same order they have in l1"
shared = []
for el1 in l1:
for el2 in l2 :
if not (el1-el2):
shared.append(el1)
break
return shared
def shares_edge(face, poly, vtx1, vtx2):
vtxes = face.verticesof(poly)
list = intersection_vect([vtx1, vtx2], vtxes)
return len(list)==2
def coplanar(f1, f2, opp=1):
"if opp==0, face normals must point in same direction"
o1 = f1.dist*f1.normal
o2 = f2.dist*f2.normal
# debug('coplanar')
if not f1.normal*(o2-o1):
if not f1.normal-f2.normal:
return 1
if opp and not f1.normal+f2.normal:
return 1
return 0
#$Log: faceutils.py,v $
#Revision 1.3 2001/08/11 04:14:51 tiglari
#remove debug
#
#Revision 1.2 2001/04/15 06:05:52 tiglari
#add coplanar function
#
#Revision 1.1 2001/04/01 04:43:48 tiglari
#initial commit
#